﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataLayer.dbml;
using System.Xml.Linq;
using System.Data.Linq.SqlClient;
using System.Data;
using DataLayer.Utilities;

namespace DataLayer.Controller
{
    /// <summary>
    /// Clase responsable de las operaciones que se realizan sobre los clientes finales
    /// </summary>
    public class FinalClientController : GenericController<CLIENTE_FINAL,DataClassesDataContext>
    {
        /// <summary>
        /// Retorna listado de clientes finales asociados al nit que llega
        /// </summary>
        /// <param name="nit">Nit al cual estan asociados los clientes finales que se etsan buscando</param>
        /// <param name="name">Nombre a bsucar dentro de los clientes finales que se estan buscando</param>
        /// <returns></returns>
        public static List<CLIENTE_FINAL> GetAllByCuenta(string nit, string name)
        {
            return (from cta in DataContext.CUENTA 
                    join ccf in DataContext.CUENTA_CLIENTEFINAL on cta.ID_CUENTASFDC.Substring(0,15) equals ccf.ID_CUENTASFDC
                    join cf in DataContext.CLIENTE_FINAL on ccf.ID_CLIENTEFINALSDFC equals cf.ID_CLIENTEFINALSDFC.Substring(0,15)
                    where cta.NIT_CUENTA == nit && (name == string.Empty ? true : SqlMethods.Like(cf.NOMBRE_CLIENTEFINAL, "%" + name + "%"))
                    select cf).ToList<CLIENTE_FINAL>();
        }

        /// <summary>
        /// Retorna datatable con la información de un cliente final, dado su id
        /// </summary>
        /// <param name="idClienteFinalSF"></param>
        /// <returns></returns>
        public static DataTable GetById(string idClienteFinalSF)
        {
            var q = from cl in DataContext.CLIENTE_FINAL
                    join cu in DataContext.CUENTA_CLIENTEFINAL on cl.ID_CLIENTEFINALSDFC.Substring(0,15) equals cu.ID_CLIENTEFINALSDFC
                    select new
                    {
                        nit = cl.NIT_CLIENTEFINAL,
                        nombre = cl.NOMBRE_CLIENTEFINAL,
                        idClienteSF = cl.ID_CLIENTEFINALSDFC,
                        idCuenta = cu.ID_CUENTASFDC
                    };

            return ConvertData.ToDataTable(q);
        }

    }
}
